package com.c4.controller;

import com.c4.chat.ChatRequest;
import com.c4.chat.ChatResponse;
import com.c4.chat.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.*;
import java.util.concurrent.ThreadLocalRandom;

@RestController
@RequestMapping("/ai")
@CrossOrigin(origins = "http://localhost:5173")
public class AIChatController {

    private static final List<String> AI_RESPONSES = Arrays.asList(
            "我理解你的问题，让我思考一下...",
            "我不确定我完全理解了。你能详细说明一下吗？",
            "这是一个复杂的问题。你能详细说明一下吗？"
    );

    @PostMapping("/chat")
    public ChatResponse chat(@RequestBody ChatRequest request) throws InterruptedException {
        Thread.sleep(1000);
        // 这里处理对话逻辑
        // 1. 收集用户消息
        List<Message> messages = request.getMessages();
        System.out.println("all message = " + messages);
        // 2. 调用AI服务获取回复 (示例，实际需要替换为真实的AI服务调用)
        Message msg = messages.get(messages.size() - 1);
//        System.out.println("msg = " + msg.toString());
        String responseContent = generateAIResponse(msg.toString());
        System.out.println("responseContent = " + responseContent);
        // 3. 返回回复
        ChatResponse response = new ChatResponse();
        response.setContent(responseContent);
        return response;
    }


    private String generateAIResponse(String userMessage) {
        // 简单的模式匹配，根据用户消息内容返回不同的回答
        if (userMessage.contains("你好") ||
                userMessage.contains("hi")||
                userMessage.contains("hello")) {
            return "你好呀！我是你的AI小助手，有什么我可以帮您的？";
        } else if (userMessage.contains("今天天气怎么样") ) {
            return "气温33℃，东南风2级，湿度64。";
        } else if (userMessage.contains("告警")) {
            return "好的，针对这个问题进行分析...... \n" +
                    "异常指标如下：\n" +
                    "1、流量延迟：核心交换机间延迟突增至 152ms\n" +
                    "2、丢包率：服务器上行链路丢包率 8.2%\n" +
                    "3、带宽使用：出口防火墙带宽利用率 95% \n" +
                    "针对异常深入分析如下：\n" +
                    "1.流量延迟暴增（>150ms）\n" +
                    "- 物理层故障：根本原因是物理层出现问题。发生概率为35%。\n" +
                    "- 路由震荡：根本原因是路由发生震荡。发生概率为28%。 \n" +
                    "- 队列拥塞：根本原因是队列出现拥塞。发生概率为22%。 \n" +
                    "- TCP应用层问题：根本原因是TCP应用层存在问题。\n" +
                    "2.高丢包率（>5%）" +
                    "- 关键指标：\n" +
                    "- 连续100次ping测试（间隔200ms）\n" +
                    "- 丢包率>5%即触发告警" +
                    "3.带宽持续饱和（>90%）\n" +
                    "- 真实流量分析：iftop -nNP -i eth0定位TOP5流量主机\n" +
                    "- 虚假带宽占用：\n" +
                    "- 广播风暴：show interface | include \"broadcasts\"每秒>5000帧\n" +
                    "- DDoS攻击：NetFlow检测到单一目标IP接收>10Gbps流量 \n" +
                    "您可以针对细节再次向我提问，我可以给出更针对性的解决方案。";
        } else if (userMessage.contains("影响范围")) {
            return "好的，针对这个问题进行分析...... \n" +
                    "1、级联故障预测 \n" +
                    "交换机丢包 → TCP重传超时 → 应用层会话中断 → 集群节点失联 → 数据库主备切换 \n" +
                    "2、业务影响矩阵 \n" +
                    "·实时交易系统\n" +
                    "- 当延迟大于 100ms 且丢包率大于 3% 时，该实时交易系统会受到影响。其 SLA 违约计算方式为：损失金额 =（故障持续时长 ×1000 笔 / 秒）×5.2 美元 / 笔\n" +
                    "·视频服务\n" +
                    "- 若带宽占用率大于 95% 且持续时间超过 10 分钟，视频服务会受波及。此时用户流失率的计算方式为：用户流失率 = 0.3%× 超时分钟数\n" +
                    "·跨数据中心同步\n" +
                    "- 当核心路由丢包率大于 1% 时，跨数据中心同步业务会受影响，面临数据不一致风险等级相关问题\n" +
                    "您可以针对细节再次向我提问，我可以给出更针对性的细节分析。";
        } else if (userMessage.contains("分层")) {
            return "1、自动化应急响应（5秒内触发）\n" +
                    "|故障类型|自动执行动作|\n" +
                    "|_______|__________|\n" +
                    "|带宽过载|启用QoS策略|\n" +
                    "|DDoS攻击|联动清洗设备|\n" +
                    "|链路故障|切换备用路径| \n" +
                    "2、人工修复操作\n" +
                    "1）人工修复操作\n" +
                    "·步骤1：定位错误端口\n" +
                    "·步骤2：更换光模块（SFP+标准）\n" +
                    "- 拔插操作：按住卡扣 → 拔出模块 → 清洁光纤接口 → 插入新模块\n" +
                    "- 验证命令：show transceiver detail | include RxPower\n" +
                    "-正常范围：单模:-8 ~ -15dBm | 多模:-3 ~ -10dBm\n" +
                    "·步骤3：错误计数清零（需重启端口）\n" +
                    "3、网络层故障修复\n" +
                    "(一)BGP路由震荡处理\n" +
                    "- 调整Keepalive/Hold时间\n" +
                    "- 启用多跳\n" +
                    "- 解除错误策略\n" +
                    "(二)队列拥塞优化\n" +
                    "- 提升视频类带宽\n" +
                    "- 启用WRED避免TCP全局同步" +
                    "您可以针对细节再次向我提问，我可以给出更针对性的细节分析。";
        } else if (userMessage.contains("系统性预防")) {
            return "好的，针对这个问题进行分析...... \n" +
                    "1、架构级防御（永久生效）" +
                    "以下是几种方案及其配置要点与效果：\n" +
                    "·多路径负载\n" +
                    "-配置要点：采用 ECMP（等价多路径路由）结合 BFD（双向转发检测）检测 。\n" +
                    "·DDoS 防护架构\n" +
                    "-配置要点：进行清洗中心部署。\n" +
                    "·容量规划\n" +
                    "-配置要点：基于 AI 预测，误差率小于 3% 。\n" +
                    "2、预防性维护计划\n" +
                    "·每日\n" +
                    "-维护任务：检查物理层错误计数\n" +
                    "·每周\n" +
                    "-维护任务：进行 BGP 配置合规性审计\n" +
                    "·每月\n" +
                    "-维护任务：开展带宽利用率趋势预测\n" +
                    "·每季度\n" +
                    "-维护任务：实施全网压力测试\n" +
                    "3、关键指标阈值参考\n" +
                    "|监控项目|正常范围|警告阈值|\n" +
                    "|_______|_______|_______|\n" +
                    "|网络延迟|(<50ms)|50-100ms|\n" +
                    "|丢包概率|(<0.1%)|0.1%-1%|\n" +
                    "|带宽用率|（<70%)|70%-85%| " +
                    "您可以针对细节再次向我提问，我可以给出更针对性的细节分析。";
        } else {
            // 随机选择一个预设的回复
            int randomIndex = ThreadLocalRandom.current().nextInt(AI_RESPONSES.size());
            return AI_RESPONSES.get(randomIndex);
        }
    }
}
